#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
编码字段统计分析脚本
统计results目录下所有TXT文件中编码字段的分布情况
"""

import os
import json
from collections import defaultdict


def analyze_coding_fields(results_dir):
    """
    分析编码字段的分布情况
    
    Args:
        results_dir: 结果文件目录
    
    Returns:
        dict: 编码字段统计结果
    """
    # 初始化统计数据结构
    field_stats = defaultdict(lambda: defaultdict(int))
    total_files = 0
    
    # 获取所有TXT文件
    txt_files = [f for f in os.listdir(results_dir) if f.endswith('.txt')]
    
    print(f"开始分析 {len(txt_files)} 个TXT文件...")
    
    # 分析每个文件
    for txt_file in txt_files:
        file_path = os.path.join(results_dir, txt_file)
        total_files += 1
        
        try:
            with open(file_path, 'r', encoding='utf-8') as f:
                content = f.read()
                
                # 提取编码字段部分
                coding_section_start = content.find('=== 编码字段 ===')
                if coding_section_start != -1:
                    coding_section = content[coding_section_start:]
                    
                    # 提取每个编码字段
                    lines = coding_section.split('\n')
                    for line in lines:
                        line = line.strip()
                        if ':' in line and line != '=== 编码字段 ===':
                            field_name, field_value = line.split(':', 1)
                            field_name = field_name.strip()
                            field_value = field_value.strip()
                            
                            # 更新统计
                            field_stats[field_name][field_value] += 1
        
        except Exception as e:
            print(f"处理文件 {txt_file} 时出错: {e}")
    
    print(f"分析完成，共处理 {total_files} 个文件")
    return field_stats


def display_stats(stats):
    """
    显示统计结果
    
    Args:
        stats: 统计数据
    """
    print("\n========== 编码字段统计结果 ==========")
    print()
    
    # 按照字段名排序显示
    for field_name in sorted(stats.keys()):
        print(f"【{field_name}】")
        
        # 获取该字段的所有值及其计数
        values = stats[field_name]
        total_count = sum(values.values())
        
        # 按计数降序排序
        for value, count in sorted(values.items(), key=lambda x: x[1], reverse=True):
            percentage = (count / total_count) * 100 if total_count > 0 else 0
            print(f"  {value}: {count}个 ({percentage:.1f}%)")
        
        print(f"  总计: {total_count}个")
        print()
    

def export_stats(stats, output_file):
    """
    导出统计结果到JSON文件
    
    Args:
        stats: 统计数据
        output_file: 输出文件路径
    """
    # 转换defaultdict为普通dict以便JSON序列化
    export_data = {}
    for field_name, values in stats.items():
        export_data[field_name] = dict(values)
    
    with open(output_file, 'w', encoding='utf-8') as f:
        json.dump(export_data, f, ensure_ascii=False, indent=2)
    
    print(f"统计结果已导出到: {output_file}")


def main():
    """
    主函数
    """
    # 配置目录路径
    results_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results')
    output_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'coding_stats.json')
    
    # 检查目录是否存在
    if not os.path.exists(results_dir):
        print(f"错误: 目录 {results_dir} 不存在")
        return
    
    # 执行分析
    stats = analyze_coding_fields(results_dir)
    
    # 显示结果
    display_stats(stats)
    
    # 导出结果
    export_stats(stats, output_file)


if __name__ == "__main__":
    main()